package com.wnx.job.modules.jms.controller;


import com.wnx.job.common.api.Const;
import com.wnx.job.common.api.PageResult;
import com.wnx.job.common.api.QueryPageBean;
import com.wnx.job.common.api.ResultData;
import com.wnx.job.modules.jms.dto.PostParam;
import com.wnx.job.modules.jms.model.JmsCompany;
import com.wnx.job.modules.jms.service.JmsCompanyService;
import com.wnx.job.modules.jms.service.JmsPostService;
import com.wnx.job.modules.pms.model.PmsTag;
import com.wnx.job.nosql.elasticsearch.document.EsPost;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.security.Principal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author wangnaixing
 * @since 2021-12-17
 */
@Slf4j
@RestController
@RequestMapping("/jms/jmsPost")
public class JmsPostController {

    @Resource
    private JmsPostService postService;
    @Resource
    private JmsCompanyService companyService;



    /**
     * 删除招聘信息
     *
     * @param id
     * @return
     */
    @GetMapping("/delete/{id}")
    @ApiOperation("删除招聘信息")
    public ResultData<String> delete(@PathVariable(name = "id") Long id) {
        log.info("【=========系统正在删除招聘信息，删除招聘信息ID为：{}=======】", id);
        postService.removeById(id);
        log.info("【============系统删除招聘成功！！===========】");
        return ResultData.success(Const.DELETE_POST_SUCCESS);
    }


    /**
     * 批量删除招聘信息
     *
     * @return
     */
    @PostMapping("/deleteByBatch")
    @ApiOperation("批量删除招聘信息")
    public ResultData<String> deleteByBatch(@RequestBody Long[] ids) {
        log.info("【======系统正在批量删除招聘信息......====】");
            postService.removeByIds(Arrays.asList(ids));
        log.info("【======系统正在批量删除招聘信息成功了！！！！====】");
        return ResultData.success(Const.DELETE_POST_SUCCESS);
    }

    /**
     * 修改招聘信息
     * @param post
     * @return
     */
    @PostMapping("/update")
    @ApiOperation("修改招聘信息")
    public ResultData<String> update(@RequestBody @Validated PostParam post){
        log.info("【=======系统正在修改招聘信息中，该招聘信息的信息为：============");
        postService.updatePost(post);
        log.info("【============系统修改招聘信息成功！！===========】");
        return ResultData.success(Const.UPDATE_POST_SUCCESS);
    }




    /**
     *获取招聘信息列表
     * @param queryPageBean
     * @return
     */
    @PostMapping("/getPostList")
    @ApiOperation("(网站前台)获取招聘信息列表")
    public ResultData<PageResult<PostParam>> getPostList(@RequestBody QueryPageBean queryPageBean){
        log.info("========(网站前台)系统正在获取职位信息列表=================");
        PageResult<PostParam>  pageResult = postService.findByPage(queryPageBean);
        log.info("========(网站前台)系统获取职位信息列表成功=================");
        return ResultData.success(Const.QUERY_POST_SUCCESS,pageResult);
    }


    @PostMapping("/getPostListByOrder")
    @ApiOperation("(网站前台)分类获取招聘数据")
    public ResultData<PageResult<EsPost>> getPostListByOrder(@RequestBody QueryPageBean queryPageBean){
        log.info("========(网站前台)系统正在获取职位信息列表=================");
        PageResult<EsPost>  pageResult = postService.getPostList(queryPageBean);
        log.info("========(网站前台)系统获取职位信息列表成功=================");
        return ResultData.success(Const.QUERY_POST_SUCCESS,pageResult);
    }

    @GetMapping("/getPostDetailById/{id}")
    @ApiOperation("(网站前台)根据ID获取招聘数据详情")
    public ResultData<EsPost> getPostDetailById(@PathVariable(name = "id")Long id){
        log.info("========(网站前台)系统正在根据ID获取招聘数据详情=================");
       EsPost esPost =  postService.getPostDetailById(id);
        log.info("========(网站前台)系统获取根据ID获取招聘数据详情=================");
        return ResultData.success(Const.QUERY_POST_SUCCESS,esPost);
    }




    /**
     * 根据公司ID查询公司招聘信息
     * @param queryPageBean
     * @return
     */
    @PostMapping("/findCompanyPost")
    @ApiOperation("根据公司ID查询公司招聘信息")
    public ResultData<PageResult<PostParam>> findCompanyPost(@RequestBody QueryPageBean queryPageBean, Principal principal){
        log.info("【==========系统正在根据公司ID查询公司招聘信息=============】");
        //调用持久层，根据公司ID进行分页查询招聘信息
        JmsCompany companyByDb = companyService.findByUsername(principal.getName());
        Map<String,Object> queryParams = queryPageBean.getQueryParams();
        queryParams.put("companyId",companyByDb.getId());
        queryPageBean.setQueryParams(queryParams);
        PageResult<PostParam> pageResult = postService.findByPage(queryPageBean);
        log.info("【==========系统根据公司ID查询公司招聘信息息成功！=============】");
        return ResultData.success(Const.QUERY_POST_SUCCESS,pageResult);
    }

    /**
     * 新增招聘信息
     * @param postParam
     * @return
     */
    @PostMapping("/save")
    @ApiOperation("系统正在进行新增招聘信息中")
    public ResultData<String> save(@RequestBody @Validated PostParam postParam, Principal principal) {
        log.info("=========系统正在进行新增招聘信息中==============");
        //通过认证主体，获取公司信息
        JmsCompany companyByDb = companyService.findByUsername(principal.getName());
        postParam.setCompanyId(companyByDb.getId());
        //调用服务，进行招聘信息新增。
        postService.savePost(postParam);
        //返回结果集对象
        log.info("=========系统正在进行新增招聘信息成功！！！！==============");
        return ResultData.success(Const.ADD_POST_SUCCESS);



    }



    /**
     * 根据ID查询招聘信息
     * @param id
     * @return
     */
    @GetMapping("/findById/{id}")
    @ApiOperation("根据ID查询招聘信息")
    public ResultData<PostParam> findById(@PathVariable(name = "id")Long id){
        log.info("=========系统正在根据ID查询招聘信息中==============");

        //获取前端的招聘信息ID

        //调用服务，根据职位ID查询招聘信息
        PostParam post = postService.findById(id);

        //调用服务根据职位ID查询职位标签集合
        List<PmsTag> tagList =  postService.findTagListByPostId(id);

        post.setTagList(tagList);


        log.info("=========系统根据ID查询招聘信息成功！！！！==============");
        return ResultData.success(Const.QUERY_POST_SUCCESS,post);
    }


    /**
     * 分页查询招聘信息
     * @param queryPageBean
     * @return
     */
    @PostMapping("/findByPage")
    @ApiOperation("分页查询招聘信息")
    public ResultData<PageResult<PostParam>> findByPage(@RequestBody QueryPageBean queryPageBean){
        log.info("【==========系统正在分页查询招聘信息{}=============】",queryPageBean);
        PageResult<PostParam> pageResult = postService.findByPage(queryPageBean);
        log.info("【==========系统正在分页查询招聘信息成功=============】");
        return ResultData.success(Const.QUERY_POST_SUCCESS,pageResult);
    }



}

